🐳 docker | August 21, 2021
도커 컴포즈를 사용해보고 익혀봅시다!
여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
image 명령어를 통해 docker run 명령어처럼 바로 실행도 가능version : compose 버전.
services : 컴포즈를 이용해서 실행할 컨테이너 옵션을 정의build : 빌드할 도커 파일의 위치image : compose를 통해 실행할 이미지를 지정
run 명령어를 통해 image를 허브에서 바로 pull해서 돌리는 역할과 비슷command : 컨테이너에서 실행될 명령어 지정port : 컨테이너가 공개하는 포트를 나열link : 다른 컨테이너와 연계할 때 연계할 컨테이너를 지정expose : 포트를 링크로 연계된 컨테이너에게만 공개할 포트volumes : 컨테이너에 볼륨을 마운드environment : 컨테이너에 적용할 환경변수를 정의restart : 컨테이너가 종료될 때 적용할 restart 정책
no : default 값 - 재시작 되지 않음always : 컨테이너를 수동으로 끄기 전까지 항상 재시작on-failure : 오류가 있을 시에 재시작depends_on : 컨테이너 간의 종속성을 정의, 정의한 컨테이너가 먼저 동작$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose --versionFlask, Redis 컨테이너를 도커 컴포즈를 통해 실행시켜 봅시다.
실습 전 알아두기!
도커 컴포즈는 yml파일 위치가 있는 곳에서 실행을 해주어야 합니다.
따라서 디렉토리 생성 후, 도커 파일 정의, 컴포즈 파일 정의 및 실행을 하는 순서를 추천합니다.
$ mkdir composetest
$ cd composetestcat > app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)cat > requirements.txt
flask
redisFROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]version: '3.9'
services:
web:
build: .
ports:
- '5000:5000'
redis:
image: 'redis:alpine'$ docker-compose config$ docker-compose upFlask, Redis 컨테이너를 통해 잘 실행된 모습입니다.
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
# ------추가--------
volumes:
- .:/code
environment:
FLASK_ENV: development
# -----------------
redis:
image: "redis:alpine"$ docker-compose up -d$ vi app.py
...
return Hello Docker!
...scale 명령어를 통해 redis 컨테이너 늘리기$ docker-compose scale redis=3run 명령어를 통해 docker exec 명령어처럼 명령 결과를 받아오기
wordpress와 mysql 컨테이너를 도커 컴포즈를 통해 실행시켜 봅시다.
wordpress의 동작 방식과 구성 내용은 도커 network 포스팅 or 공식 래퍼런스 참고
$ mkdir wordpress
$ cd wordpress도커 컴포즈 [docker-compose.yml] 파일 생성
version: '3.9'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- '8080:80'
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}$ docker-compose up -d볼륨 마운트를 확인
'/var/lib/docker/volumes/폴더명/볼륨명/_data' 형태로 표시가 됩니다.$ docker volume inspect 볼륨 데이터 이름해당 경로로 진입해서 확인
도커 컴포즈 정리
--volumes 추가 옵션을 통해 볼륨마운트까지 정리된 모습$ docker-compose down --volume